Version Française English Version

Planète Casio - Programmes, jeux et cours pour calculatrices Casio

Bookmark and Share
Bienvenue sur Planète Casio, n'hésitez pas à poser vos questions sur le forum, et pensez à rejoindre Planète-Casio sur Facebook !
Jeu de rugby
Forums Casio - Astuces Calculatrices Casio

Index du Forum | Astuces Calculatrices Casio | [Tutorial] La 3D
Neuronix
Hors ligne
Webmaster
Niveau: Elite
Points: 4487
Défis: 21
Email | Message
Posté le 02/01/2006 13:12

[Tutorial] La 3D:

Tout programmeur en basic se pose la question de la "3D" ...qui sonne si mystérieusement et délicieusement à l'oreille de tout accro du monde virtuel.

Je propose ici une approche d'une methode de rendu d'objets en 3D. Si vous etes un programmeur courageux et ambitieux passez votre chemin, regardez mes progs Util 3D et graph 3D sans regarder le code et cherchez vous meme

Je vais enployer la méthode du drawstat, pensez à regarder le tutorial dédié à cette technique si vous n'etes pas au point .

On va travailler sur un objet simple : un cube de 2 unités de coté centré sur l'origine.

Entrons ses coordonnées :
{1,1,-1,-1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,1}->List 1
{-1,1,1,-1,-1,-1,1,1,1,1,1,1,-1,-1,-1,-1}->List 2
{-1,-1,-1,-1,-1,1,1,-1,1,1,-1,1,1,-1,1,1}->List 3


Notez que pour avoir un beau cube avec tous ses aretes en drawstat il faut repasser par certains pouints d'ou le nombre de points.

Ici List 1 = X List 2 = Y et List 3 = Z

Nous allons partir du principe que pour afficher le cube en 3D il suffit de retenir ses coordonnées en X et Y. Donc essayons d'afficher notre cube :

//paramétrez le s-graph 1 pour le drawstat en xyLine et Dot
S-WindMan // pour que nous puissions imposer la fenetre
View-Window -4,4,0,-2,2,0 // on peux prendre cette fenetre pour l'exemple car avec le coté du cube est de longueur 2
Drawstat

Et là on obtient :
smiley


On dirait un carré et pas un cube car on n'a pas ajouté d'effet de fuite. On fera ça plus tard, pour le moment on va faire tourner le cube sur lui meme

On a les coordonnées cartésiennes des points du cube mais on va utiliser les coordonnées polaires pour la démonstration de la formule que j'ai utilisé qui est sans doute la plus rapide et la plus simple.

On va faire tourner le cube selon le plan x-y puis y-z puis x-z donc en fait à chaque fois on est ramené à une rotation simple dans un plan tel que vous en connaissez depuis la seconde (au moins).

Regardez l'image suivante pour mieux comprendre ce qui suit :
smiley


Le point initial M fait un angle µ avec l'axe des abscisses et est à une distance r de O.
M' le point image apres la rotation est également à une distance r mais fait un angle µ+µ' avec l'axe des abscisses où µ' est l'angle de rotation.

On donc en coordonnées polaires : M(r;µ) M'(r,µ+µ') et en coordonnées cartésiennes M(x,y) et M'(x',y')

On a :
x = r*cos µ x' = r*cos (µ+µ')
y = r*sin µ y' = r*sin (µ+µ')

J'imagine que vous connaissez tous tres bien vos formules de trigo donc je ne vous rappelle pas que
cos (a+b) = cos a*cos b - sin a*sin b
sin (a+b) = sin a*cos b + sin b*cos a

D'où
x' = r*cos µ*cos µ' - r*sin µ*sin µ'
= x*cos µ' - y*sin µ'

y' = r*sin µ*cos µ' + r*sin µ' *cos µ
= y*cos µ' + x*sin µ'

Et voila ! on a une magnifique formule en fonction de x, y et µ' l'angle de rotation!!!!
Simple et extremement rapide! car il suffit de 2 calculs par rotation!

J'ai mis beaucoup beaucoup de temps pour trouver ceci meme si la formule parait simple une fois ecrite il faut y penser...

Voila, je ne vous fais pas le code, je vous laisse gratter un peu quand meme et au passage vous venez de lire en 2 min ce que j'ai cherché pendant des mois...1 an je pense .... (car MOI je voulais faire tout seul )

Code d'exemple :

ClrGraph
{1,1,-1,-1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,1}->List 1
{-1,1,1,-1,-1,-1,1,1,1,1,1,1,-1,-1,-1,-1}->List 2
{-1,-1,-1,-1,-1,1,1,-1,1,1,-1,1,1,-1,1,1}->List 3
S-Grph1 DrawOn,xyLine,List1,List2,1,Dot
0->A~C
Do
"A"?->A
"B"?->B
"C"?->C
Cls
Text 1,1,"Calcul."
List 1 * cos A - List 2 * sin A ->List 4
List 1 * sin A + List 2 * cos A ->List 2
List 4->List 1
Text 1,30,"."
List 2 * cos B - List 3 * sin B ->List 4
List 2 * sin B + List 3 * cos B ->List 3
List 4->List 2
Text 1,34,"."
List 1 * cos C - List 3 * sin C ->List 4
List 1 * sin C + List 3 * cos C ->List 3
List 4->List 1
Cls
Drawstat[DISP]
Lpwhile 1=1

Bookmark and Share

Manager de foot en ligne sympa !
smiley



Louloux
Hors ligne
Rédacteur
Niveau: Confirmé
Points: 3178
Défis: 37
Email | Message
Dernier message de la page précédente :Posté le 21/09/2011 20:45 |
J'attendrai. de toute façon en ce moment je déconnecte de CASIO pour mon bon vieil ordi ( vive les windows forms )
----------------------------------
Dieu créa l'homme, l'homme créa la calculatrice... Qui est le prochain ?
42



Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, 8, 9

Purobaz
Hors ligne
Membre
Niveau: Aucun
Points: 2166
Défis: 108
Email | Message
Citer : Posté le 06/12/2011 18:11 |
Wah vraie 3D
Désolé c'est sur Ti, mais peut-être un jour sur Prizm
----------------------------------
smiley
smiley

Cliquer pour dérouler
Cliquer pour enrouler

graph 35+ USB

jeux :
Solitr

cours :
Solution


graph 35+ USB / 75 / 85 /95

jeux basic :
Escape prison
London 12 puro
Plumber
Yetisport ic
Platstre
M-niais
Akinator
Solitr
Robots

jeux addin :
Snowball

jeux lua :
Where am i
Mario

utilitaires basic :
Bitmap PRGM2
QR code
Boussole
Nombre en or
Calendr

utilitaires addin :
PRGM2
picture 1024

utilitaires Lua :
Pi en Lua

cours :
Solution


Prizm

jeux :
Free wheel
Yetisport puro
Rush hour color
Plumber
Prizm pack
Flight cg20

utilitaires :
Sprite maker cg
Paint 20
Menu cg20


Tutorials
PRGM2
Chaines de caractères et tableaux 2D


Projets

Ultimate solution
   73%


OBELIB
   28%


Un RPG en basic qui envoie du lourd !
   38%

Mario pour Prizm
   46%

Fight pour Prizm
   56%

addin PacMan
   90%



La programmation est pour moi la chose la plus sacrée !... c'est pour ça que j'y touche pas !
Smashmaster
Hors ligne
Modérateur
Niveau: Vétéran
Points: 3208
Défis: 86
Email | Message
Citer : Posté le 06/12/2011 20:42 |
A mon avis ce n'est pas possible de faire des jeux en vrai 3D (avec des lunettes 3D) sur la prizm (au niveau de lenteur) car sur un ordinateur par exemple un jeu en vrai 3D avec lunette est deux voir même trois fois plus lent que le même jeu en 3D sans lunette
----------------------------------
L1 Math-Informatique à l'université Paul-Verlaine (Metz)
Purobaz
Hors ligne
Membre
Niveau: Aucun
Points: 2166
Défis: 108
Email | Message
Citer : Posté le 07/12/2011 12:44 |
Doit y avoir des astuces pour contourner le problème.
A mon avis, dans le jeu cité plus haut, tous les éléments du décor ne sont pas en 3D.
Ça dépend aussi du type de jeu.

De plus les calculs pour rajouter la 3D ne sont pas très longs et compliqués. Il faut juste décaler la deuxième image en fonction de la profondeur.
----------------------------------
smiley
smiley

Cliquer pour dérouler
Cliquer pour enrouler

graph 35+ USB

jeux :
Solitr

cours :
Solution


graph 35+ USB / 75 / 85 /95

jeux basic :
Escape prison
London 12 puro
Plumber
Yetisport ic
Platstre
M-niais
Akinator
Solitr
Robots

jeux addin :
Snowball

jeux lua :
Where am i
Mario

utilitaires basic :
Bitmap PRGM2
QR code
Boussole
Nombre en or
Calendr

utilitaires addin :
PRGM2
picture 1024

utilitaires Lua :
Pi en Lua

cours :
Solution


Prizm

jeux :
Free wheel
Yetisport puro
Rush hour color
Plumber
Prizm pack
Flight cg20

utilitaires :
Sprite maker cg
Paint 20
Menu cg20


Tutorials
PRGM2
Chaines de caractères et tableaux 2D


Projets

Ultimate solution
   73%


OBELIB
   28%


Un RPG en basic qui envoie du lourd !
   38%

Mario pour Prizm
   46%

Fight pour Prizm
   56%

addin PacMan
   90%



La programmation est pour moi la chose la plus sacrée !... c'est pour ça que j'y touche pas !
Loulou non longue
Statut : Invité
Citer : Posté le 07/12/2011 12:48 |
J 'ai poste une news pour encourager les gens à faire de la 3d. Je suis certain que c'est possible.
Smashmaster
Hors ligne
Modérateur
Niveau: Vétéran
Points: 3208
Défis: 86
Email | Message
Citer : Posté le 07/12/2011 19:51 |
De plus les calculs pour rajouter la 3D ne sont pas très longs et compliqués. Il faut juste décaler la deuxième image en fonction de la profondeur.
Mais le problème vient au niveau de la superposition des deux images, je pense que c'est surtout ça qui fait ralentir des programmes en 3D, il y a aussi un peu de transparence (exemple: Lien, le vert est un peu transparent) du coup je pense qu'il faut modifier les valeurs RVB de presque tous les pixels de la première image en fonction de la couleur des pixels de la deuxième image.
Mais c'est possible que je me trompe.
Doit y avoir des astuces pour contourner le problème.
Utiliser des sprites qui sont déjà en 3D de base?
----------------------------------
L1 Math-Informatique à l'université Paul-Verlaine (Metz)
Louloux
Hors ligne
Rédacteur
Niveau: Confirmé
Points: 3178
Défis: 37
Email | Message
Citer : Posté le 08/12/2011 19:41 |
Après peut-être qu'il faut se limiter au noir et blanc du coup... mais les calculs n'ont jamais tué personne...
Le projet ( encore secret ) que je suis en train de mener m'en demande pas mal...
----------------------------------
Dieu créa l'homme, l'homme créa la calculatrice... Qui est le prochain ?
42
Kristaba
Hors ligne
Membre
Niveau: Vétéran
Points: 585
Défis: 22
Email | Message
Citer : Posté le 08/12/2011 22:25 | Fichier joint
Comme je vois que pas mal de monde est intéressé par le rendu 3D en ce moment, je vous met à disposition une mini lib bien pratiques dans ce genre de domaine.

Il s'agit de fonctions de manipulation de nombres à virgule fixe.
En gros, comme notre CPU ne dispose pas d'un FPU (instructions dédiées à un traitement rapide des nombres à virgule flottante), dès qu'on utilise des float/double en C, le temps de calcul est largement supérieur à une utilisation d'entiers.

Les "fixed" permettent de faire un compromis entre performances et précision, en utilisant des entiers de 32 bits qui sont alors utilisés comme des nombres réels, mais contrairement aux float, la position de la virgule est fixe (définie à la compilation), ce qui empêche la représentation de très grands nombres ou de très petites fractions, mais permet de simplifier énormément les instructions nécessaires aux calculs.

De plus, une table pré-calculée (avec un pas de 0.1°) permet d'obtenir de meilleurs perfs pour les opérations trigonométriques (sin cos tan), très utilisées dans les calculs en 3D.

Bon, c'est pas hyper bien documenté, mais rapidement :
Dans fixed.h, on trouve un
#define DB 15
On peut changer cette valeur pour changer la position de la virgule dans le nombre binaire (entre 0 -pas de partie fractionnaire- et 31 -pas de partie entière-) sachant que les entiers sont signés, donc 1 bit pour le signe.

Pour donner un ordre de grandeur, avec 15 bits de partie fractionnaire (donc 16 pour la partie entière et 1 bit de signe), on a les valeurs min/max autour de +/- 65000, et un pas d'environs 0.00003

Parmi les fonctions disponibles, il y a
FIX() / UNFIX(), pour convertir un entier vers un fixed ou un fixed vers un entier
fixtostr() pour écrire la valeur d'un fixed dans une chaine
ftofix() / fixtof() pour convertir un flottant vers un fixed et inversement (pour utiliser des fonctions mathématiques de la lib std C par exemple)
fdiv(), fmul() pour diviser/multiplier des fixed entre eux
fsin(), fcos(), ftan() pour la trigo

Pour les additions/soustractions, il suffit d'utiliser le "+" habituel (une addition de fixed se fait en un seul cycle du processeur)


Ah, oui, le code est écrit pour GCC, il y a peut-être des retouches à faire pour passer sous le compilo de Renesas, mais ça devrait pas être trop compliqué.

Pour les opérations style racine carrée et compagnie, je n'ai pas écrit de fonction pour cela, il faut donc convertir le fixed en flottant et utiliser les fonctions de math.h (le tout étant coûteux en temps CPU :x)

Pour finir là dessus, il se trouve que ce genre de nombres est assez bien adapté au monde de la 3D car les échelles de grandeur manipulées sont généralement assez proche, ce qui n'est pas forcément le cas dans nombre d'autres applications (pour lesquels les float restent indispensables).
----------------------------------
Une bataille navale avec Intelligence Artificielle sur Graph 35?
C'est ICI !

Projets en cours :
*CGUI++, Une GUI C++ multi-plateforme conçue pour fonctionner sur calculatrices.
*Tiles Creator, un environnement de création et gestion de ressources graphiques.
Eiyeron
Hors ligne
Modérateur
Niveau: Confirmé
Points: 3948
Défis: 37
Email | Message
Citer : Posté le 08/12/2011 22:28 |
j'avais récupéré ce truc... il arche sur l'SDk si on vire tout ce qui a rapport à RevolutionFX...
----------------------------------
smileysmileysmiley
smileysmiley
Thomatos
Hors ligne
Administrateur
Niveau: Vétéran
Points: 3145
Défis: 21
Email | Message
Citer : Posté le 08/12/2011 22:35 |
Je suppose que t'avais créé ça dans le but de faire quelque-chose en 3D, non ?

Si oui, t'as fait quoi ? Je crois me rappeler que Pierrot m'avais parlé d'un p'tit moteur d'affichage 3D avec je sais plus combien de cubes, à je sais plus combien d'FPS (ça remonte trop pour que je me souvienne). Mais connaissant tes qualités de programmeur, je suppose que tu étais arrivé à un résultat intéressant non ?
Eiyeron
Hors ligne
Modérateur
Niveau: Confirmé
Points: 3948
Défis: 37
Email | Message
Citer : Posté le 09/12/2011 17:52 |
Voulais essayer de le reprendre afin d'un faute un moteur meilleur
----------------------------------
smileysmileysmiley
smileysmiley
Ninestars
Hors ligne
Membre
Niveau: Vétéran
Points: 10
Défis: 0
Email | Message
Citer : Posté le 29/05/2012 21:37 |
Comment est-il possible de cacher les arrêtes derrières ?
Limachi
Hors ligne
Membre
Niveau: Confirmé
Points: 891
Défis: 44
Email | Message
Citer : Posté le 29/05/2012 22:46 |
tu veux un cours particulier? et en quel langage? si tu veux mon aide, tu peux m'envoyer un message, je tenterais de t'aider (mais si l'astuce est conne est simple (mathématiques niveau 2onde ou 1ère) l'utilisation peut parfois être ardue).
----------------------------------
Mes programmes


-mon tuto sur les Str

Mes calto: G25+, G75

Je me suis mit recement au C.
smiley
cliquez vite ici et découvrez un moteur 3D pour un projet de minecraft en construction, VIVE LES GEEKBROTHERS (précision en passant, c'est le moteur qui n'est pas finit , mais vous pouvez télécharger les tests).

smiley
Dark storm
Hors ligne
Membre
Niveau: Confirmé
Points: 700
Défis: 5
Email | Message
Citer : Posté le 29/05/2012 22:50 |
Moi je veut bien tant que t'y es
Je risque d'en avoir besoin pour mon Blender
----------------------------------
smiley
smiley
smiley

Ne0tux
Hors ligne
Membre
Niveau: Vétéran
Points: 1313
Défis: 92
Email | Message
Citer : Posté le 29/05/2012 23:08 |

Si quelqu'un sait vraiment comment cacher des arrêtes "derrières" pour une modélisation 3D pleine en Basic, je suis également intéressé !
----------------------------------
Deviens le roi de la banquise avec Ice Slider !

Prêt pour un bain de soleil sur l'asphalte brûlante ? Alors tente de sortir entier du Canyon !

Une logique sans faille et une intelligence hors normes ? Prouve-le en jouant au Master Mind !
Vdragon.b
En ligne
Membre
Niveau: Confirmé
Points: 1155
Défis: 0
Email | Message
Citer : Posté le 30/05/2012 13:15 |
je suis intéressé aussi.
----------------------------------
there are many incredible things in the world...So,believe in yours dreams!
I own a graph 3575+.
smiley
smiley
Dark storm
Hors ligne
Membre
Niveau: Confirmé
Points: 700
Défis: 5
Email | Message
Citer : Posté le 30/05/2012 13:19 |
Le tuto ! Le tuto !
----------------------------------
smiley
smiley
smiley

Louloux
Hors ligne
Rédacteur
Niveau: Confirmé
Points: 3178
Défis: 37
Email | Message
Citer : Posté le 30/05/2012 14:15 |
Vous avez vu ma news sur la 3D ? Dedans il y avait un lien dans lequel vous trouvez comment faire de la 3D pleine ou filaire avec même placage de texture !
Ca pourrait aider pour ton Blender Dark storm.
----------------------------------
Dieu créa l'homme, l'homme créa la calculatrice... Qui est le prochain ?
42
Dark storm
Hors ligne
Membre
Niveau: Confirmé
Points: 700
Défis: 5
Email | Message
Citer : Posté le 30/05/2012 14:42 |
je l'avait carrément oubliée
J'y go
----------------------------------
smiley
smiley
smiley

Limachi
Hors ligne
Membre
Niveau: Confirmé
Points: 891
Défis: 44
Email | Message
Citer : Posté le 31/05/2012 00:03 |
ok, je ferais un tuto simple comme bonjour si possible, pour les figures convexes (cube) et concaves (plusieurs angles de différentes tailles, ou une série de cube par exemple)

l'une des techniques consiste a utiliser l'angle de rotation du cube, et l'autre la normale des faces du cube (plus dur et plus long, essentiellement pour le C si il y a plusieurs formes géométriques)

Ajouté le 31/05/2012 à 00:29 :
tenez: lien
j'ai fait viteuf un petit tuto sur l'occlusion de face, si sa vous intéresse
----------------------------------
Mes programmes


-mon tuto sur les Str

Mes calto: G25+, G75

Je me suis mit recement au C.
smiley
cliquez vite ici et découvrez un moteur 3D pour un projet de minecraft en construction, VIVE LES GEEKBROTHERS (précision en passant, c'est le moteur qui n'est pas finit , mais vous pouvez télécharger les tests).

smiley

Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, 8, 9

Index du Forum | Astuces Calculatrices Casio | [Tutorial] La 3D
Pseudo :
Adresse email :
Réponse :
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :?:  :arrow:  :!:  :here:
Ajouter fichier joint :


Me prévenir par mail lorsqu'une réponse est postée.

Un petit test (entrez le résultat en chiffres):
Combien font huit moins quatre ?

Recherche :
Publicité et partenaires

Omnimaga
Casio Education
Casio Éducation
Casio Scene
Casio Scene

TI-Planet
CasioFan, la communauté ClassPad
CasioFan
Space-Raider
Space-Raider
GameMaster
GameMasters.fr

Jeux Casio - www.planet-casio.com v3.0 © créé par Neuronix et Muelsaco 2004-2012 | Il y a 50 connectés | Nous contacter | Recherches effectuées
Rugby Manager | Jeu de handball | Jeu de foot | Jeu de rugby | Jeu de tennis | Space raider | Sublinet | Top-cinema, films, cinéma, séries | Pension pour chats

Planète-Casio est un site communautaire indépendant et n'est donc pas affilié à Casio | Toute reproduction de Planète-Casio, même partielle, est interdite
Les fichiers, programmes et publications postés sur Planète-Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des copyrights
Merci de respecter le travail des autres ! | CASIO est une marque déposée par CASIO Computer Co., Ltd